<html>
    <head>
        <title>uni.downloadFile(Object)</title>
    </head>
    <body>
        <script>
             /*
                            二、uni.downloadFile(Object)

                                        下载文件资源到本地，客户端直接发起一个 HTTP GET 请求，返回文件的本地临时路径。
                                        
                                        1、downloadFile 兼容性

                                                                HarmonyOS
                                                                HBuilderX 4.23

                                                                <1>、Object 参数说明

                                                                                参数名	        类型	        必填	        说明	                                                    平台差异说明

                                                                            ①、url	            String	        是	        下载资源的 url	

                                                                            ②、header	        Object	        否	        HTTP 请求 Header, header 中不能设置 Referer。	

                                                                            ③、timeout	        Number	        否	        超时时间，单位 ms	                                    H5、APP、微信小程序、支付宝小程序、抖音小程序、快手小程序
                                                                        
                                                                            ④、filePath	        string	        否	        指定文件下载后存储的路径 (本地路径)	                     小程序端支持（微信IOS小程序保存到相册需要添加此字段才可以正常保存）
                                                                            
                                                                            ⑤、success	        Function	    否	        下载成功后以 tempFilePath 的形式传给页面，
                                                                                                                            res = {tempFilePath: '文件的临时路径'}

                                                                            ⑥、fail	            Function	    否	        接口调用失败的回调函数	

                                                                            ⑦、complete	        Function	    否	        接口调用结束的回调函数（调用成功、失败都会执行）	

                                                                            ★、注意： 文件的临时路径，在应用本次启动期间可以正常使用，如需持久保存，需在主动调用  uni.saveFile,才能在应用下次启动时访问得到。


                                                                <2>、success 返回参数说明

                                                                                参数	            类型	说明	                                                                                平台差异说明

                                                                            ①、tempFilePath	       String	临时文件路径，下载后的文件会存储到一个临时文件	                    微信小程序、支付宝小程序、百度小程序、抖音小程序、飞书小程序

                                                                            ②、statusCode	       Number	开发者服务器返回的 HTTP 状态码	                                  微信小程序、QQ小程序、百度小程序、抖音小程序、飞书小程序

                                                                            ③、apFilePath	       String	下载文件保存的路径（本地临时文件）。
                                                                                                            入参未指定 filePath 的情况下可用	                                                    支付宝小程序

                                                                            ④、filePath	           String	用户文件路径 (本地路径)。
                                                                                                            传入 filePath 时会返回，跟传入的 filePath 一致	                   微信小程序、支付宝小程序、抖音小程序、飞书小程序

                                                                            ⑤、fileContent	       Buffer	文件内容	QQ小程序

                                
                                        2、返回值
                                        
                                                    返回值类型：  DownloadTask

                                                    <1>、DownloadTask 的方法

                                                            ①、abort():void

                                                                    中断下载任务

                                                            ②、onProgressUpdate(callback: DownloadFileProgressUpdateCallback): void

                                                                    监听下载进度变化

                                                                    ★、onProgerssUpdate 兼容性

                                                                            HarmonyOS
                                                                            HBuilderX 4.23

                                                                    ★、参数 HarmonyOS 兼容性

                                                                            名称	        类型	                                必填	默认值	兼容性	描述
                                                                            callback	(result: OnProgressDownloadResult) => void	是	    -	    -	    -

                                                                    ★、OnProgressDownloadResult 的属性值

                                                                                名称	                    类型	    必填	默认值  	兼容性	        描述

                                                                            ①、progress	                    number	    是	    -           ok          下载进度百分比

                                                                            ③、totalBytesWritten	        number	    是	    -	        ok          已经下载的数据长度，单位 Bytes

                                                                            ⑤、totalBytesExpectedToWrite	number	    是	    -	        OK          预期需要下载的数据总长度，单位 Bytes

                                                                         △、注意：  网络请求的 "超时时间" 可以统一在 manifest.json 中配置  "networkTimeout"

                                                    <2>、示例
                                                        
                                                                uni.downloadFile({
                                                                    url:'https:// www.example.com/file/test',  // 仅为示例，并非真实的资源
                                                                    success:(res)=>{
                                                                        if(res.statusCode ==200){
                                                                            console.log('下载成功');
                                                                        }
                                                                    }
                                                                })

                                                    <3>、返回值

                                                                如果希望返回一个 downloadTask 对象，需要至少传入  success / fail / complete 参数中的一个。

                                                                例如：

                                                                        var downloadTask = uni.downloadFile({
                                                                            url:'https:// www.example.com/file/test', 
                                                                            complete:()=>{}
                                                                        }}

                                                                        downloadTask.abort() // 中断下载任务


                                                                果没有传入 success / fail / complete 参数，则会返回封装后的 Promise 对象：Promise 封装(https://uniapp.dcloud.net.cn/api/index.html#promise-%E5%B0%81%E8%A3%85)

                                                                通过 downlaodTask ,可监听下载进度变化事件，以及取消下载任务。

                                                                ★、downloadTask 对象的方法列表

                                                                                    方法	              参数	          说明	                                                                                        最低版本 

                                                                                ①、abort		                    中断下载任务	                                                                                        *

                                                                                ②、onProgressUpdate	    callback	监听下载进度变化	                                                                                    *

                                                                                ③、onHeadersReceived	callback	监听 HTTP Response Header 事件，会比请求完成事件更早,仅微信小程序平台支持，规范详情	
                                                                                
                                                                                ④、offProgressUpdate	callback	取消监听下载进度变化事件，仅微信小程序平台支持，规范详情
                                                                                
                                                                                ⑤、offHeadersReceived	callback	取消监听 HTTP Response Header 事件，仅微信小程序平台支持，规范详情

                                                                ★、onProgressUpdate 返回参数说明

                                                                                    参数	                    类型	        说明

                                                                                ①、progress	                    Number	     下载进度百分比

                                                                                ②、totalBytesWritten	        Number	     已经下载的数据长度，单位 Bytes

                                                                                ③、totalBytesExpectedToWrite	Number	     预期需要下载的数据总长度，单位 Bytes


                                        3、示例

                                                const downloadTask = uni.downloadFile({
                                                    url: 'http://www.example.com/file/test', //仅为示例，并非真实的资源
                                                    success: (res) => {
                                                        if (res.statusCode === 200) {
                                                            console.log('下载成功');
                                                        }
                                                    }
                                                });

                                                downloadTask.onProgressUpdate((res) => {
                                                    console.log('下载进度' + res.progress);
                                                    console.log('已经下载的数据长度' + res.totalBytesWritten);
                                                    console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);

                                                    // 满足测试条件，取消下载任务。
                                                    if (res.progress > 50) {
                                                        downloadTask.abort();
                                                    }
                                                });
                        */
        </script>
    </body>
</html>